<template>
  <el-card shadow="always" :body-style="{ padding: '20px' }">
    <div slot="header">
      <span>基本资料</span>
    </div>
    <!-- card body -->
    <el-form
      :model="userInfoF"
      ref="fm"
      :rules="rules"
      label-width="80px"
      :inline="false"
      size="normal"
    >
      <el-form-item label="登录名称">
        <el-input v-model="userInfoF.username" disabled></el-input>
      </el-form-item>
      <el-form-item label="用户昵称" prop="nickname">
        <el-input v-model="userInfoF.nickname"></el-input>
      </el-form-item>
      <el-form-item label="用户邮箱" prop="email">
        <el-input v-model="userInfoF.email"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="undataUser">提交修改</el-button>
        <el-button @click="resetForm">重置</el-button>
      </el-form-item>
    </el-form>
  </el-card>
</template>

<script>
import { undataUserinfoApi } from '@/api/user'
export default {

  data () {
    return {
      // 思考🤔：为什么刷新之后之前存在vuex的数据获取不到了？
      // 用户信息修改：在原有用户信息数据基础上
      // 思考1🤔：为什么刷新之后之前存在vuex的数据获取不到了？
      // 因为：用户数据获取=》发请求获取的，异步的，组件赋值是vuex默认值
      // userInfo: this.$store.state.user.userInfo,
      // 思考2🤔：监控数据的变化，干事儿=》使用watch监听vuex数据的变化
      // userInfoF: this.$store.state.user.userInfo,
      userInfoF: {},
      rules: {
        nickname: [
          { required: true, message: '请输入用户昵称', trigger: 'blur' },
          { pattern: /^\S{2,10}$/, message: '昵称必须是1-10位的非空字符串', trigger: 'blur' }
        ],
        email: [
          { required: true, message: '请输入用户邮箱', trigger: 'blur' },
          { type: 'email', message: '邮箱格式不正确', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    undataUser () {
      this.$refs.fm.validate(async (isok) => {
        if (isok) {
          // 校验通过
          const { data } = await undataUserinfoApi(this.userInfoF)
          console.log('提交数据', data.message)
          if (data.code === 0) {
            this.$message.success(data.message)
            this.$store.dispatch('user/getUser')
          } else {
            this.$message.success(data.message)
          }
        }
      })
    },
    resetForm (fm) {
      // this.$$refs[fm].resetFields()
      this.$refs.fm.resetFields()
    }
  },
  watch: {
    // 同步vuex数据给组件变量userInfo使用
    // 说明：刷新问题解决了，但是切页面不行
    '$store.state.user.userInfo': {
      // 页面加载之后立马执行一次监听
      immediate: true,
      handler (newValue) {
        console.log('监听到的数据', newValue)
        // 用户数据和vue变量引用关系处理
        // 浅拷贝
        this.userInfoF = { ...newValue }
      }

    }
  }
}
</script>

<style lang="less" scoped>
</style>
